package cn.wolfcode.core;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * @author zhangh
 * @version 1.0
 * @date 2025/9/26 09:16
 * @description: WebSocketServer 用于客户端连接
 */
@ServerEndpoint("/{token}")
@Component
@Slf4j
public class WebSocketServer {

    // 用来存在线连接数
    public static Map<String,Session> SESSION_MAP = new ConcurrentHashMap<>();

    /**
     * 链接成功调用的方法 onOpen
     * */
    @OnOpen
    public void onOpen(Session session, @PathParam("token")  String token) {
        log.info("[WebSocket消息] 新客户端连接：{}",token);
        // 保持连接对象（session）
        SESSION_MAP.put(token,session);
    }

    /**
     * 连接关闭 onClose
     * */
    @OnClose
    public void onClose(@PathParam("token")  String token) {
        log.info("[WebSocket消息] 关闭连接：{}",token);
        SESSION_MAP.remove(token);
    }

    /**
     * 收到客户端消息后 调用的方法
     */
    @OnMessage
    public void onMessage(String message) {
        log.info("[WebSocket消息]: 收到客户端消息:" + message);
    }


    @OnError
    public void onError(Throwable throwable) {
        log.error("[WebSocket消息] 连接异常：{}",throwable.getMessage());
    }

}
